WEB服务器

推荐列表 站点导航

当前位置:首页 > 服务器技术 > WEB服务器 >

tomcat中Servlet的工作机制

来源:网络整理  作者:网友投稿  发布时间:2020-12-29 21:22
在研究Servlet在tomcat中的工作机制前必须先看看Servlet规范的一些重要的相关规定,规范提供了一个Servlet接口,接口中...

在研究Servlet在tomcat中的工作机制前必须先看看Servlet规范的一些重要的相关规定,规范提供了一个Servlet接口,接口中包含的重要方法是init、service、destroy等方法,Servlet在初始化时要调用init方法,在销毁时要调用destroy方法,而对客户端请求处理时则调用service方法。对于这些机制的支持都必须由Tomcat内部去支持,具体则是由Wrapper容器提供支持。

在tomcat中消息流的流转机制是通过四个不同级别的容器管道机制进行流转的,对于每个请求都是一层一层处理的。如下图,当客户端请求到达服务端后请求被抽象成request对象后向四个容器进行传递,首先经过Engine容器的管道通过若干阀门,最后通过StandardEngineValve阀门流转到Host容器的管道,处理后继续往下流转,通过StandardHostValve阀门流转到Context容器的管道,继续往下流转,通过StandardContextValve阀门流转到Wrapper容器的管道,而对Servlet的核心处理也正是在StandardWrapperValve阀门中。StandardWrapperValve阀门调用Servlet的service方法队请求进行处理,然后对客户端响应。

这里写图片描述

下面更深入了解下StandardWrapperValve阀门调用Servlet的过程。
web应用的Servlet类都是根据Servlet接口,例如一般我们在写业务处理Servlet类时都会继承HttpServlet类,为了遵循Servlet规范,它其实最终也是实现了Servlet接口,只是HttpServlet定义了HTTP协议的Servlet,将协议共性的东西抽离出来复用。Servlet处理客户端请求的核心方法为service方法,所以对于HttpServlet来说,它需要针对http协议的GET、Z喎"http://www.it165.net/pro/pkqt/" target="_blank">QT1NUoaJQVaGiREVMRVRFoaJIRUFEoaJPUFRJT05ToaJUUkFDRbXIx+vH87e9t6jX9rP2srvNrLXEt9a3orSmwO2jrM6qt72x48DtveKjrM/Cw+bTw7j2vPK7r7XEtPrC69W5yr6jujwvcD4KPHByZSBjbGFzcz0="brush:java;"> public abstract class HttpServlet extends Servlet{ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String method = req.getMethod(); if (method.equals('GET')) { doGet(request, response); }else if (method.equals('POST')) { doPost(request, response); }else if (method.equals('HEAD')) { doHead(request, response); } } protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} }

service方法将请求对象和响应对象转换成HttpServletRequest和HttpServletResponse,然后获取请求方法,根据请求方法调用不同的处理方法,例如如果为GET方法则调用doGet方法,那么在继承了HttpServlet类的Servlet只需重写doGet或doPost方法完成业务逻辑处理,这就是我们熟悉的Servlet了。

这样一来,StandardWrapperValve阀门调用Servlet的工作其实就是通过反射机制实现对Servlet对象的控制,例如在不配置load-on-startup情况下,客户端首次访问该Servlet时由于还不存在该Servlet对象,需要通过反射机制实例化出该Servlet对象,并且调用初始化方法,所以这也是为什么第一次访问某个Servlet时会比较耗时的原因,后面客户端再对该Servlet访问时都会使用该Servlet对象,无需再做实例化和初始化操作。有了Servlet对象后调用其service方法即完成了对客户端请求的处理。
实际上通过反射机制实例化Servlet对象是一个比较复杂的过程,它除了完成实例化和初始化工作外还要解析该Servlet类包含的各种注解并作处理,另外,对于实现了SingleThreadModel接口的Servlet类,它还要维护一个该Servlet对象池。

综上所述,Servlet工作机制大致流程是:request -> StandardEngineValve -> StandardHostValve -> StandardContextValve -> StandardWrapperValve -> 实例化并初始化Servlet对象 -> 调用该Servlet对象的service方法 -> response。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/server/web/10820.shtml

最新文章
当然还有几点主要注意的 当然还有几点主要注意的

时间:2021-01-19

如果宝塔面板MySQL数据库经 如果宝塔面板MySQL数据库经

时间:2021-01-18

请按此教程安装即可 请按此教程安装即可

时间:2021-01-18

 登陆宝塔面板第一次输错 登陆宝塔面板第一次输错

时间:2021-01-18

选择添加服务器 选择添加服务器

时间:2021-01-18

ApacheHama安装部署 ApacheHama安装部署

时间:2021-01-08

Windows系统下解决PhPStudy Windows系统下解决PhPStudy

时间:2021-01-05

小旋风ASPWEBServer是什么? 小旋风ASPWEBServer是什么?

时间:2021-01-05

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

tomcat中Servlet的工作机制

2020-12-29 编辑:网友投稿

在研究Servlet在tomcat中的工作机制前必须先看看Servlet规范的一些重要的相关规定,规范提供了一个Servlet接口,接口中包含的重要方法是init、service、destroy等方法,Servlet在初始化时要调用init方法,在销毁时要调用destroy方法,而对客户端请求处理时则调用service方法。对于这些机制的支持都必须由Tomcat内部去支持,具体则是由Wrapper容器提供支持。

在tomcat中消息流的流转机制是通过四个不同级别的容器管道机制进行流转的,对于每个请求都是一层一层处理的。如下图,当客户端请求到达服务端后请求被抽象成request对象后向四个容器进行传递,首先经过Engine容器的管道通过若干阀门,最后通过StandardEngineValve阀门流转到Host容器的管道,处理后继续往下流转,通过StandardHostValve阀门流转到Context容器的管道,继续往下流转,通过StandardContextValve阀门流转到Wrapper容器的管道,而对Servlet的核心处理也正是在StandardWrapperValve阀门中。StandardWrapperValve阀门调用Servlet的service方法队请求进行处理,然后对客户端响应。

这里写图片描述

下面更深入了解下StandardWrapperValve阀门调用Servlet的过程。
web应用的Servlet类都是根据Servlet接口,例如一般我们在写业务处理Servlet类时都会继承HttpServlet类,为了遵循Servlet规范,它其实最终也是实现了Servlet接口,只是HttpServlet定义了HTTP协议的Servlet,将协议共性的东西抽离出来复用。Servlet处理客户端请求的核心方法为service方法,所以对于HttpServlet来说,它需要针对http协议的GET、Z喎"http://www.it165.net/pro/pkqt/" target="_blank">QT1NUoaJQVaGiREVMRVRFoaJIRUFEoaJPUFRJT05ToaJUUkFDRbXIx+vH87e9t6jX9rP2srvNrLXEt9a3orSmwO2jrM6qt72x48DtveKjrM/Cw+bTw7j2vPK7r7XEtPrC69W5yr6jujwvcD4KPHByZSBjbGFzcz0="brush:java;"> public abstract class HttpServlet extends Servlet{ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String method = req.getMethod(); if (method.equals('GET')) { doGet(request, response); }else if (method.equals('POST')) { doPost(request, response); }else if (method.equals('HEAD')) { doHead(request, response); } } protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{} protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {} }

service方法将请求对象和响应对象转换成HttpServletRequest和HttpServletResponse,然后获取请求方法,根据请求方法调用不同的处理方法,例如如果为GET方法则调用doGet方法,那么在继承了HttpServlet类的Servlet只需重写doGet或doPost方法完成业务逻辑处理,这就是我们熟悉的Servlet了。

这样一来,StandardWrapperValve阀门调用Servlet的工作其实就是通过反射机制实现对Servlet对象的控制,例如在不配置load-on-startup情况下,客户端首次访问该Servlet时由于还不存在该Servlet对象,需要通过反射机制实例化出该Servlet对象,并且调用初始化方法,所以这也是为什么第一次访问某个Servlet时会比较耗时的原因,后面客户端再对该Servlet访问时都会使用该Servlet对象,无需再做实例化和初始化操作。有了Servlet对象后调用其service方法即完成了对客户端请求的处理。
实际上通过反射机制实例化Servlet对象是一个比较复杂的过程,它除了完成实例化和初始化工作外还要解析该Servlet类包含的各种注解并作处理,另外,对于实现了SingleThreadModel接口的Servlet类,它还要维护一个该Servlet对象池。

综上所述,Servlet工作机制大致流程是:request -> StandardEngineValve -> StandardHostValve -> StandardContextValve -> StandardWrapperValve -> 实例化并初始化Servlet对象 -> 调用该Servlet对象的service方法 -> response。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/server/web/10820.shtml

相关文章

风云图片

推荐阅读

返回WEB服务器频道首页